import os
import pandas as pd

folder_path = './'          # 放log文件的文件夹位置'./'为工程目录
log_keyword = "start"       # 截取log中最后一段的关键词
kw_freq_1 = "freq app1"     # 关键词1
kw_freq_2 = "freq app2"     # 关键词2
kw_freq_3 = "freq app3"     # 关键词3
kw_freq_4 = "freq app4"     # 关键词4
kw_vol = "vol"              # 电压关键词


# 定义函数用于查找并存储后续文本,截取log中最后一段的函数
def search_and_store(file_path, keyword):
    with open(file_path, 'r', encoding='utf-8') as log_file:    #读取file_path文件位置列表，只读，编码为utf，存到log_file里
        log_lines = log_file.readlines()    #将文本按行存入log_lines
    log_reversed_lines = list(reversed(log_lines))  #将文本的行顺序翻转
    for log_index, log_line in enumerate(log_reversed_lines):
        if keyword in log_line: #在顺序反转后的文本内每行循环搜索关键词
            target_index = len(log_lines) - log_index - 1   #找到关键词后保存索引位置
            break   #搜索到1个就退出循环（从后往前搜索就是最后一个，符合截取要求）
    else:
        return ""  # 如果没找到关键词，返回空字符串
    return "".join(log_lines[target_index + 1:])    #返回索引位置之后的文本
# 函数结束

excel_writer = pd.ExcelWriter("output.xlsx",engine='openpyxl')  #新建表格，使用openpyxl工具

for root, dirs, files in os.walk(folder_path):  #读取folder_path文件夹内所有文件信息
    for file in files:  #循环搜索文件
        if file.endswith('.txt'):   #如果文件后缀是.txt
            log_file_path = os.path.join(root, file)    #保存文件地址

            #csv_file_path = os.path.join(root, file[:-4] + '.csv')
            sheet_name = os.path.join(file[:-4])    #保存文件名作为工作表的名称为
            print(sheet_name)

            freq1_array = []
            freq2_array = []
            freq3_array = []
            freq4_array = []
            data1 = []
            data2 = []
            data3 = []
            data4 = []
            parts_freq = []

            result_text = search_and_store(log_file_path, log_keyword)  #运行截取log中最后一段的函数
            print(result_text)

            lines = result_text.split('\n')     #将截取后的文本按换行符分割
            reversed_lines = list(reversed(lines))  #将文本内容按行反向翻转
            for indexa,line in enumerate(reversed_lines):
                if kw_freq_1 in line:   #在反向翻转后的文本内搜索关键词freq1（循环搜索完所有freq1，每搜索到一次freq1就搜索一次电压）
                    index_a = line.index(kw_freq_1) #保存索引位置
                    after_keyword = line[index_a + len(kw_freq_1):].strip() #截取索引位置那行关键词之后的文本（即参数名和数据）
                    after_keyword = after_keyword.replace(", "," ") #将刚刚截取的文本中的逗号替换成空格
                    parts_freq = after_keyword.split(' ', 3)    #将刚刚截取替换好的文本安空格进行分割3次，分成四组
                    print(parts_freq)
                    sremain_line = reversed_lines[indexa:]  #从索引位置继续向下搜索（翻转后的文本）
                    for indexb,sub_line in enumerate(sremain_line):
                        if kw_vol in sub_line:  #在之后的文本内搜索关键词vol
                            index_b = sub_line.index(kw_vol) #保存关键词索引
                            after_vol = sub_line[index_b + len(kw_vol):].strip()    #截取索引位置那行关键词之后的文本（即电压数据）
                            freq1_array.append([parts_freq,[after_vol]])    #将之前分割好的四个数据、参数和电压数据组合为一个数组
                            break   #只用找到一次电压就退出循环（一个电压对应一个freq1）
            #程序先将文本内所有freq1搜索好，再重新搜索freq2，freq3。。。
            for indexa,line in enumerate(reversed_lines):
                if kw_freq_2 in line:
                    index_a = line.index(kw_freq_2)
                    after_keyword = line[index_a + len(kw_freq_2):].strip()
                    after_keyword = after_keyword.replace(", "," ")
                    parts_freq = after_keyword.split(' ', 3)

                    sremain_line = reversed_lines[indexa:]
                    for indexb,sub_line in enumerate(sremain_line):
                        if kw_vol in sub_line:
                            index_b = sub_line.index(kw_vol)
                            after_vol = sub_line[index_b + len(kw_vol):].strip()
                            freq2_array.append([parts_freq,[after_vol]])
                            break

            for indexa,line in enumerate(reversed_lines):
                if kw_freq_3 in line:
                    index_a = line.index(kw_freq_3)
                    after_keyword = line[index_a + len(kw_freq_3):].strip()
                    after_keyword = after_keyword.replace(", "," ")
                    parts_freq = after_keyword.split(' ', 3)

                    sremain_line = reversed_lines[indexa:]
                    for indexb,sub_line in enumerate(sremain_line):
                        if kw_vol in sub_line:
                            index_b = sub_line.index(kw_vol)
                            after_vol = sub_line[index_b + len(kw_vol):].strip()
                            freq3_array.append([parts_freq,[after_vol]])
                            break

            for indexa,line in enumerate(reversed_lines):
                if kw_freq_4 in line:
                    index_a = line.index(kw_freq_4)
                    after_keyword = line[index_a + len(kw_freq_4):].strip()
                    after_keyword = after_keyword.replace(", "," ")
                    parts_freq = after_keyword.split(' ', 3)

                    sremain_line = reversed_lines[indexa:]
                    for indexb,sub_line in enumerate(sremain_line):
                        if kw_vol in sub_line:
                            index_b = sub_line.index(kw_vol)
                            after_vol = sub_line[index_b + len(kw_vol):].strip()
                            freq4_array.append([parts_freq,[after_vol]])
                            break


            for element in freq1_array:
                parts_freq = element[0]
                after_vol = element[1][0]
                data1.append([after_vol,parts_freq[1],parts_freq[3]])   #将数组重新组排列成需要的格式（电压，数据1，数据2）

            df1 = pd.DataFrame(data1,columns=['voltage1',parts_freq[0],parts_freq[2]])  #将三列数组写入表格缓存，并为每一列数据命名（电压，参数1.参数2）
            df1 = df1.sort_values(by='voltage1',ascending=False).reset_index(drop=True) #将表格缓存按第一列电压进行从大到小的排序
            #重复处理四组freq1-4
            for element in freq2_array:
                parts_freq = element[0]
                after_vol = element[1][0]
                data2.append([after_vol,parts_freq[1],parts_freq[3]])

            df2 = pd.DataFrame(data2,columns=['voltage2',parts_freq[0],parts_freq[2]])
            df2 = df2.sort_values(by='voltage2',ascending=False).reset_index(drop=True)

            for element in freq3_array:
                parts_freq = element[0]
                after_vol = element[1][0]
                data3.append([after_vol,parts_freq[1],parts_freq[3]])

            df3 = pd.DataFrame(data3,columns=['voltage3',parts_freq[0],parts_freq[2]])
            df3 = df3.sort_values(by='voltage3',ascending=False).reset_index(drop=True)

            for element in freq4_array:
                parts_freq = element[0]
                after_vol = element[1][0]
                data4.append([after_vol,parts_freq[1],parts_freq[3]])

            df4 = pd.DataFrame(data4,columns=['voltage4',parts_freq[0],parts_freq[2]])
            df4 = df4.sort_values(by='voltage4',ascending=False).reset_index(drop=True)

            df = pd.concat([df1,df2,df3,df4],axis=1)    #将四组数据横向组合在一起写入一个表格缓存
            #df = df.sort_values(by='voltage1',ascending=False)
            print(df)

            df.to_excel(excel_writer,sheet_name=sheet_name,index=False) #将表格缓存写入excel文件，每个txt新建一个工作表，工作表名为文件名
excel_writer._save()    #所有文件和工作表处理完成后保存
excel_writer.close()    #关闭


'''
import os
import pandas as pd


def your_function(df):
    # 在这里使用pandas对传入的数据框df进行具体处理，以下是简单示例，返回原数据框，你要按需替换处理逻辑
    return df


def process_log_files(folder_path):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith('.log'):
                log_file_path = os.path.join(root, file)
                csv_file_path = os.path.join(root, file[:-4] + '.csv')
                df = pd.read_csv(log_file_path)  # 这里假设log文件内容可按csv格式读取，若格式不同需调整
                processed_df = your_function(df)
                processed_df.to_csv(csv_file_path, index=False)


# 替换成实际的文件夹路径
folder_path = 'your_folder_path'
process_log_files(folder_path)


keywords = ["boot app", "关键词2"]  # 这里替换成你实际的多个关键词列表
stored_contents = []
with open('test.txt', 'r', encoding='utf-8') as file:  # 将'your_text_file.txt'替换为实际文件名
    lines = file.readlines()
    for line in lines:
        for keyword in keywords:
            if keyword in line:
                index = line.index(keyword)
                stored_contents.append(line[index + len(keyword):].strip())
print(stored_contents)
'''